【问题标题】:Cuda kernel work very slowCuda内核工作很慢
【发布时间】:2016-02-22 01:45:19
【问题描述】:

我在加速我的 cuda 内核时遇到问题。看起来内核是单线程工作的。每个线程都在等待前一个线程。它不能并行工作。

这是我的内核(我为 Cuda 内核修改库 LibTom)

__global__ void kernel(char* BiExponent, int lines)
{


    const int threadID = blockIdx.x * blockDim.x + threadIdx.x;

    if(threadID<1000){


         mp_int BiNumber; //various from LibTom
         mp_int RNumber;
         mp_int ANumber;
         mp_int MNumber;
         mp_int TempNumber;
         mp_init_device(&RNumber);
         mp_init_device(&ANumber);
         mp_init_device(&MNumber);
         mp_init_device(&TempNumber);
         mp_init_device(&BiNumber);
         mp_read_radix_device(&RNumber, "100648686727131257488671170806992645347098870006145705670894593595064198763504906829344253213869592972491529868272101131220921074193778137252965944155929765587582637231372264910012095142603377767870875822235936330880194126549443874542394830706956638044950273189050162374717380508672959124318834975983480937576",10);
         mp_read_radix_device(&ANumber, "39805067790951086730573861588172121787196543962580983242598202413750011891252460890446709601730030154661775311984755147556289281733978635511703976267279217024606927800989962204783456250825578178354787716873876536014210063984216741307040544888447847197648475195752689213083224036785420625437224428658490304276",10);
         mp_read_radix_device(&MNumber, "129135516335051440235803237491679224882957576030599162234748304648924718545589827797866156951847154321645009878340207570056281485244329202363518578978799475118300745910542939512857296428327440920812107991347416747733387762031164387998805210106456861835748765549471962882426089437101578019500113090139371006775",10);
         mp_read_radix_device(&TempNumber, "0",10);
         char* cstr  = new char[YDIM];
            for(int i=0; i<YDIM; i++){  
                cstr[i] = BiExponent[(threadID*YDIM)+i];
            }
         mp_read_radix_device(&BiNumber,cstr ,10);
         mp_exptmod_device(&ANumber, &BiNumber, &MNumber,&TempNumber); //TEMP = (A^Bi)mod M
         if(mp_cmp_device(&RNumber,&TempNumber)==MP_EQ){ // IF(TEMP==R)
            printf("TRUE\n");
         }
         mp_clear_device(&BiNumber);
         mp_clear_device(&RNumber);
         mp_clear_device(&MNumber);
         mp_clear_device(&ANumber);
         mp_clear_device(&TempNumber);
         delete [] cstr;    
        //      printf("x = %d\n", threadID);


    }}

在主机中启动内核:

kernel <<< 1024, 1 >>> (dev_Bi2dChar, lines);

运行 1000 个号码:80 秒。它非常慢,我不知道它什么时候是一个错误。 :/ 我需要一些提示如何让应用加速。

【问题讨论】:

    标签: cuda


    【解决方案1】:

    您在使用时创建了 1024 个 1 线程块:
    kernel &lt;&lt;&lt; 1024, 1 &gt;&gt;&gt;

    这真的是你想要的吗?我建议用 1024 个线程创建 1 个块:
    kernel &lt;&lt;&lt; 1, 1024 &gt;&gt;&gt;.

    【讨论】:

    • kernel &lt;&lt;&lt;1,1024&gt;&gt;&gt; or &lt;&lt;&lt;2,512&gt;&gt;&gt;, &lt;&lt;&lt;8,128&gt;&gt;&gt; ,... 不起作用(/kernel.cu:4545 code=30(cudaErrorUnknown))
    • 你的卡型号是什么?
    • 我的卡是nvidia geforce gt555M
    • GT 555M的CC是2.1和Fermi架构。您应该能够使用 >> Check here 启动
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2012-11-27
    • 1970-01-01
    相关资源
    最近更新 更多