1.配置路径
[attach]3206[/attach]
设置执行时间
[attach]3205[/attach]
3.如果不设置执行时间的话,一直会出现Progress Information。
设置执行是时间(上一步设为30秒的话)。时间到会出现Session Timeline Incomplete。
请问这是怎么回事呢?怎么解决此问题?
[attach]3204[/attach]
1.配置路径
[attach]3206[/attach]
设置执行时间
[attach]3205[/attach]
3.如果不设置执行时间的话,一直会出现Progress Information。
设置执行是时间(上一步设为30秒的话)。时间到会出现Session Timeline Incomplete。
请问这是怎么回事呢?怎么解决此问题?
[attach]3204[/attach]
楼主您好,您的代码在30s的时间内未能执行完毕(执行到cudaDeviceReset()),
(例如,当您的代码需要从控制台进行输入的时候,会导致这种情况)
建议的解决方案:
(1)请查看是否您的kernel规模超大,30s未能执行完毕。
(2)如果(1)不成立,请检查是否您的进程卡在了某个地方(例如在等待键盘输入)。
请检查此2点。
没有啊,我程序很简单的,代码如下
include <stdio.h>
include <stdlib.h>
include <cuda_runtime.h>
define DATA_SIZE 1048756
int data[DATA_SIZE];
global static void sumOfSquares(int num, int result, clock_t * time)
{
if (threadIdx.x == 0)
{
int sum = 0;
int i;
clock_t timeStart = clock();
for(i = 0; i < DATA_SIZE; i++) {
sum += num[i] * num[i];
}
*result = sum;
*time = clock() - timeStart;
}
}
bool InitCUDA()
{
int count;
cudaGetDeviceCount(&count);
if(count == 0) {
fprintf(stderr, “There is no device.\n”);
return false;
}
int i;
for(i = 0; i < count; i++) {
cudaDeviceProp prop;
if(cudaGetDeviceProperties(&prop, i) == cudaSuccess) {
if(prop.major >= 1) {
break;
}
}
}
if(i == count) {
fprintf(stderr, “There is no device supporting CUDA 1.x.\n”);
return false;
}
cudaSetDevice(i);
return true;
}
void GenerateNumbers(int *number, int size)
{
for(int i = 0; i < size; i++) {
number[i] = rand() % 10;
}
}
int main()
//void mexFunction( int nlhs, mxArray *plhs, int nrhs, const mxArray *prhs )
{
if(!InitCUDA()) {
printf(“CUDA Initialized Error!.\n”);
return;
}
printf(“CUDA initialized.\n”);
GenerateNumbers(data, DATA_SIZE);
int* gpudata, *result;
clock_t * ptimeElapsed;
cudaMalloc((void**) &gpudata, sizeof(int) * DATA_SIZE);
cudaMalloc((void**) &result, sizeof(int));
cudaMalloc((void**) &ptimeElapsed,sizeof(clock_t));
cudaMemcpy(gpudata, data, sizeof(int) * DATA_SIZE, cudaMemcpyHostToDevice);
sumOfSquares<<<1, 1, 0>>>(gpudata, result,ptimeElapsed);
int sum;
clock_t timeElapsed;
cudaMemcpy(&sum, result, sizeof(int), cudaMemcpyDeviceToHost);
cudaMemcpy(&timeElapsed, ptimeElapsed, sizeof(clock_t), cudaMemcpyDeviceToHost);
cudaFree(gpudata);
cudaFree(result);
cudaFree(ptimeElapsed);
printf("sum: %d,TimeElapse = %d\n", sum,timeElapsed);
//run in CPU
sum = 0;
clock_t timeStart = clock();
for(int i = 0; i < DATA_SIZE; i++) {
sum += data[i] * data[i];
}
printf("sum (CPU): %d, TimeElapse(CPU):%d \n", sum, clock() - timeStart);
system("pause");
cudaDeviceReset();
return 0;
}
会不会是我的设置有什么问题呢?还需要什么设置吗?
楼主您好,您的system(“pause”);将无限等待键盘输入。
请去掉此行,重新尝试。
(您看了我2#的回复了吗?)
认真阅读我的回复,可以极大的减少您的无辜等待时间。
建议以后对我的回复看的认真点。大家都不容易。
谢谢。
辛苦您了,我有认真看您的回复,但我一时没意识到“system(“pause”);”会引起无限等待键盘输入。终于解决问题,辛苦了,这么晚还在帮我。
您客气了。服务您是我的荣幸。
感谢您的来访。