小编pee*_*ush的帖子

n个数字中可能的三角形总数

如果n给出数字,我如何找到可能的三角形总数?有没有什么方法能在不到一定的O(n^3)时间内完成这项工作?

我正在考虑a+b>c,b+c>a以及a+c>b成为三角形的条件.

c complexity-theory

23
推荐指数
2
解决办法
1万
查看次数

做递归干运行

我需要查看make正在使用哪些命令,但是运行命令make --dry-run不会显示内部使用的命令make -C /foo.

有没有办法递归地进行这项工作?

makefile

10
推荐指数
1
解决办法
2592
查看次数

是否可以在类外声明Objective-C方法?

我知道你可以在类之外声明一个C函数,但是可以在类之外声明一个Objective-C方法吗?

例:

// Works
void printHelloC()
{
    NSLog(@"Hello.");
}

// Error
-(void) printHelloOC
{
    NSLog(@"Hello.");
}

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        printHelloC();
        [self printHelloOC];// 'self' obviously would not work but you get the idea
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c methods objective-c

10
推荐指数
2
解决办法
6089
查看次数

输出时序问题

以下代码:

String str1="asdfavaxzvzxvc";
String str2="werwerzsfaasdf";
Object c=str1;
Object d=str2;
System.out.println(c);
long time1=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
    if(c.equals(d)){
        //System.out.println("asfasdfasdf"); // line 9
    }
}
long time2=System.currentTimeMillis();
System.out.println("time taken in this is "+(time2-time1));
Run Code Online (Sandbox Code Playgroud)

当我取消对第9行的注释时,如果条件为真则打印,但是由于两个对象不相等都不会发生,所以它需要5000+毫秒,令我惊讶的是只需注释它只需要5毫秒,我没有理由,为什么它需要这么多时间,如果没有评论,因为它永远不会被执行...

这是某种分支预测效果吗?或任何类型的编译器优化

java timing

9
推荐指数
2
解决办法
210
查看次数

为不同的Linux版本构建内核模块

我是编写内核模块的新手,因此面临很少的非技术问题.

因为为特定内核版本创建内核模块(比如3.0.0-10,10是补丁号)需要相同的版本内核头文件,所以它看起来很直接安装内核头文件并在那里开始开发.但是修补内核版本的内核头文件不可用.因为我有一个客户端内核vmlinuz-3.0.0-10在机器上运行并且在下载内核头文件时它说没有找到.

  • 另一种方法是获取该特定内核的源代码,但问题是同样的补丁内核源不可用(它不需要获取linux-kernel-3.0.0-10甚至linux-kernel-3.0.0的源代码)和第10个补丁).在某些情况下,可以获得运行内核的源代码,但并非总是可行.

  • 另一种方法是构建除运行内核之外的内核,并在机器中放置内置内核.但它需要构建该内核的模块,这是一个耗时且耗费空间的过程.

因此,问这个问题的目的是了解内核驱动程序开发人员的偏好.还有其他选择吗?

是否有可能在一个版本中编译内核模块并在另一个版本中运行(虽然它会给出错误,但有没有解决方法?)

module linux-device-driver linux-kernel

8
推荐指数
1
解决办法
2万
查看次数

原子memcpy建议


在测试程序的可伸缩性时,我遇到了必须将memcpy操作作为原子操作的情况.我必须将64字节的数据从一个位置复制到另一个位置.
我遇到了一个解决方案,即使用旋转变量是:

struct record{
    volatile int startFlag;
    char data[64];
    volatile int doneFlag;
};
Run Code Online (Sandbox Code Playgroud)

和伪代码如下

struct record *node;
if ( node->startFlag ==0 ) {  // testing the flag 
    if( CompareAndSwap(node->startFlag , 0 ,1 ) ) {  // all thread tries to set, only one will get success and perform memcpy operation 
        memcpy(destination,source,NoOfBytes);
        node->doneFlag = 1; // spinning variable for other thread, those failed in CompAndSwap 
    }
    else {
         while ( node->doneFlag==0 ) { // other thread spinning 
          ; // spin around …
Run Code Online (Sandbox Code Playgroud)

performance scalability atomic memcpy

6
推荐指数
1
解决办法
4854
查看次数

ccache的缺点

我正在使用ccache进行实验,但我不太确定我应该使用它.任何人都可以解释ccache导致错误行为的情况.或者我们应该总是使用ccache?任何获得该ccache的人都在考虑生成错误的目标文件或头文件中的更改?

performance gcc compilation ccache

5
推荐指数
1
解决办法
2571
查看次数

自定义cd命令


通常我会保留目录特定的设置.bashrc,每当我更改目录时执行命令source .bashrc以使这些设置生效.
现在我正在考虑操作cd命令~/.bashrc,因此每当我cd到新目录并且如果存在任何.bashrc时,它将自动加载.

与此类似cd $1; source .bashrc(我已经验证$ 1是有效路径),但问题是cd是shell构建,所以它是一个递归循环(cd总是指向修改的cd).我们没有cd的elf文件(通常我们有其他命令即scp或其他命令).那我该怎么做呢?此外,如果shopt -s cdspell支持,那么我还需要在$ 1的参数中使用cd拼写路径.

bash shell ubuntu cd

5
推荐指数
1
解决办法
1014
查看次数

共享内存优化混淆

我在cuda中编写了一个应用程序,它在每个块中使用1kb的共享内存.由于每个SM中只有16kb的共享内存,所以整体上只能容纳16个块(我理解它是否正确?),虽然一次只能调度8个,但现在如果某个块忙于进行内存操作,所以其他块将在gpu上进行调度,但是所有共享内存都被已经在那里安排的其他16个块使用,所以cuda不会在同一个sm上安排更多的块,除非先前分配的块完全完成?或者它会将一些块的共享内存移动到全局内存,并在那里分配其他块(在这种情况下,我们应该担心全局内存访问延迟吗?)

cuda memory-optimization

4
推荐指数
1
解决办法
1128
查看次数

垂直和水平并行

最近在并行域工作我知道有两个术语"垂直并行"和"水平并行".有些人认为openmp(共享内存并行性)是垂直的,而mpi(分布式内存并行性)则是水平并行性.为什么这些术语被称为?我没理由.这样称呼它们只是术语吗?

parallel-processing mpi openmp

4
推荐指数
1
解决办法
2297
查看次数